<?php
if(!defined('BASE_DIR'))die('Cannot access the file !');
/**
 * -+-----------------------------------------
 * |PHP Framework
 * |Copyright (c) 2010 jinke.[iblue.cc]
 * |E-mail: mejinke@gmail.com
 * |Date: 2010-07-18
 * |Update: 2011-01-06
 * -+-----------------------------------------
 *
 * Blue 框架基础类
 * @author jinke
 */
class Base
{

	public function __construct()
	{

	}


	/**
	 * 动态获取全局已存在的对象
	 * @access	public
	 * @param	string	$name 对象名称
	 * @return	object
	 */
	public function __get($name)
	{
		$var = $this->_getLang($name);
		if (!empty($var))return $var;
		if (Functions::REG($name))
			return Functions::REG($name);
		$o = Functions::REG(strtolower($name)); 
		if($o)
			return $o;
		else
			return Functions::REG(ucfirst($name));
	 }
	 

	 /**
	  * 获取语言包资料 仅在action中操作有效
	  * @access private
	  * @param string $var
	  * @return string
	  */
	 private function _getLang($var)
	 {
	 	$array = explode('_', $var);
	 	if (isset($array[0]) && $array[0]=='lang')
	 	{	
	 		$lang = Functions::REG('_lang');
	 		if ($array[1]=='')
	 			return '';
	 		if (count($array)==2)
	 			return isset($lang[$array[1]])?$lang[$array[1]]:'';
	 		else
	 			return isset($lang[$array[1]][$array[2]])?$lang[$array[1]][$array[2]]:'';
	 	}
	 	return '';
	 }
	 

	/**
	 * 动态调用全局已存在的方法
	 * @access pubilc
	 * @param string $fun  方法名称
	 * @param  array $args 参数列表
	 */
	public function __call($fun,$args)
	{
		//检查是否调用当前请求的控制器
		$obj = '';
		$method = '';
		$tep_array = explode('_',$fun);

		//调用控制器
		if(count($tep_array)==3	&& strtolower($tep_array[0])=='c')
		{
			$obj = C(ucfirst($tep_array[1]));
			$method	= $tep_array[2];
		}

		//调用model
		elseif(count($tep_array)==3 && strtolower($tep_array[0]=='m'))
		{
			$obj = Functions::M(ucfirst($tep_array[1]));
			$method = $tep_array[2];
		}

		elseif(count($tep_array)==2)
		{
			$obj = C(ucfirst($tep_array[0]));
			$method	= $tep_array[1];
		}
		else
			return false;
		if($obj)
			return call_user_func_array(array($obj,$method),$args);
		else
			return false;
	}
	
	
	/**
	 * 自动装载将要实例化的类文件
	 * @access public
	 * @param string $name 类名称
	 */
	public static function autoLoadClass($name)
	{ 
		$file = FRAMEWORK_LIB_DIR.$name.'.class.php';
		$file1 = EXTEND_LIB_DIR.$name.'.class.php';
		
		if( is_file($file) )
			require_once $file ;
		elseif(is_file($file1))		
			require_once $file1 ;

	}
	
	
	
	private function _forward($var, Array $options = array())
	{
		if (isset($options[0]) && isset($options[1]))
		{
			$obj = $options[0];
			$method = $options[1];
			$args = isset($options[2])? $options[2] : array();
			call_user_func_array(array($obj,$method),$args);
			//终于执行函数下其它内容时 运行框架结束时的操作
			Functions::RES('run_end_time',Functions::getMicroTime());
			Functions::RES('runTime',sprintf('%.4f',(Functions::REG('run_end_time') - Functions::REG('run_start_time'))).' seconds');
			Application::end();
			exit;
		}
	}
	/**
	 * 如果给定的内容值<b>不等于false</b>时继续执行相关动作
	 * @access protected
	 * @param mixed $var
	 * @param array $options
	 * @return void
	 */
	protected function forwardIsTrue($var, Array $options = array())
	{
		if ($var!==false)
			$this->_forward($var, $options);
	}
	
	/**
	 * 如果给定的内容值<b>等于false</b>时继续执行相关动作
	 * @access protected
	 * @param mixed $var 内容对象
	 * @param array $options
	 * @return void
	 */
	protected function forwardIsFalse($var, Array $options = array())
	{
		if ($var===false)
			$this->_forward($var, $options);
	}
	
	
	
	private function _redirect($var, $pageTagName, Array $args = array(), $debug)
	{
		$list = Config::get('action_redirect_page_list');
		if (isset($list[$pageTagName]))
		{
			$str = getArgsUrl($args, true);
			if ($str!='')
				$str = '?'.$str;
			Functions::go($list[$pageTagName].$str);
		}
		else 
			message_error('Redirect Error','无法跳转至：'.$pageTagName,message_debug($debug));
		exit;
	}
	/**
	 * 如果给定的内容值<b>不等于false</b>时程序将跳转至指定的页面
	 * @access protected
	 * @param mixed $var 内容对象
	 * @param string $pageTagName 将要跳至的页面标记
	 * @param array $args 参数列表［可选］
	 * @return void
	 */
	protected function redirectIsTrue($var, $pageTagName, Array $args = array())
	{
		if ($var!==false)
			$this->_redirect($var, $pageTagName, $args, debug_backtrace());
	}
	/**
	 * 如果给定的内容值<b>等于false</b>时程序将跳转至指定的页面
	 * @access protected
	 * @param mixed $var 内容对象
	 * @param string $pageTagName 将要跳至的页面标记
	 * @param array $args 参数列表［可选］
	 * @return void
	 */
	protected function redirectIsFalse($var, $pageTagName, Array $args = array())
	{
		if ($var===false)
			$this->_redirect($var, $pageTagName, $args, debug_backtrace());
	}
	
	
	/**
	 * 获取Model对象
	 * @access protected
	 * @param string $className
	 * @return mixed
	 */
	protected function getModel($className)
	{
		return Functions::M($className);
	}
	
	protected function getRouter()
	{
		return Functions::REG('FW_Router');
	}
	protected function getView()
	{
		return Functions::REG('FW_View');
	}
	protected function getUser()
	{
		return Functions::REG('FW_User');
	}
	
	
	public function __destruct()
	{
		
	}
	

}
?>
